package hotel.dao;

import java.util.LinkedList;
import java.util.List;

import hotel.tipos.Hospede;
import hotel.tipos.Servico;
import hotel.util.HibernateUtil;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

public class HospedeDao {
	public static int create(Hospede h){
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		
		session.beginTransaction();

        Integer id = (Integer) session.save(h);
        
        session.getTransaction().commit();
        
        return id.intValue();
	}
	
	@SuppressWarnings("unchecked")
	public static LinkedList<Hospede> listarHospedes() {
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		LinkedList<Hospede> hospedes = null;
		
		try{
			hospedes = new LinkedList<Hospede>(session.createQuery("from Hospede").list());
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return hospedes;
	}
	
	public static List<Hospede> buscarHospede(String str){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		List<Hospede> hospede = null;
		
		String query = new String("select h from Hospede h where h.nome like :desc");
		Query q = session.createQuery(query);
		q.setString("desc","%"+str.trim()+"%");
		
		hospede = q.list();
		
		return hospede;
	}
	
	public static Hospede buscarHospede(int id){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		Hospede hospede = null;
		
		String query = new String("select h from Hospede h where h.id = :idH");
		Query q = session.createQuery(query);
		q.setInteger("idH",id);
		
		try {
			hospede = (Hospede) q.list().get(0);
		} catch (HibernateException e){
			e.printStackTrace();
		} catch (IndexOutOfBoundsException ie){
			hospede = null;
		}
		
		return hospede;
	}
	
	public static Hospede buscarHospedeCPF(String str){
		// Cria uma sessão
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		// inicia a transação
		session.beginTransaction();
		// Cria uma lista para retornar
		Hospede hospede = null;
		
		String query = new String("select h from Hospede h where h.cpf = :desc");
		Query q = session.createQuery(query);
		q.setString("desc",str.trim());
		
		try{
			hospede = (Hospede) q.list().get(0);
		} catch (IndexOutOfBoundsException ie){
			hospede = null;
		}
		
		return hospede;
	}

}
